﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Itegracion.Framework.Forms;
using System.Text.RegularExpressions;

namespace Itegracion.iAlmacen.Forms
{
    public partial class ucCompra : ucDocumento
    {
        public ucCompra()
        {
            InitializeComponent();
            dgvItems.Columns["Unidad"].ReadOnly = false;
            idTipoEntidad = "2";
        }
        public override void OnLoadData()
        {
            idsTipo = Configuration[14];
            base.OnLoadData();
        }
        public override void OnAddItem()
        {
            fmCatalogo fm = new fmCatalogo();

            if (fm.ShowDialog() == DialogResult.OK)
            {
                (dgvItems.DataSource as DataTable).Rows.Add(
                    dgvItems.Rows.Count + 1, //#
                    1, //Cantidad
                    fm.IdUnidad,
                    fm.IdProducto,
                    fm.Producto,
                    fm.PrecioUnitario,
                    0, //SubTotal
                    null, //Vencimiento
                    "", // Lote
                    fm.IdMarca,//Laboratorio
                    0,//Peso
                    fm.Codigo
                );
                dgvItems.Focus();
                dgvItems.CurrentCell = dgvItems["cantidad", dgvItems.Rows.Count - 1];
            }
        }
        public override bool AreDataValid(ModoMantenimiento modo)
        {
            if (!Regex.IsMatch(tbSerie.Text, @"^[0-9]+$"))
                return Error(tbSerie, "Por favor, Ingrese una Serie del Documento. Ejemplo: 0001");
            if (!Regex.IsMatch(tbNumero.Text, @"^[0-9]+$"))
                return Error(tbNumero, "Por favor, Ingrese un Numero del Documento. Ejemplo: 0000000001");
            if (!Regex.IsMatch(tbDocId.Text, @"^([0-9]{8}|[0-9]{11})$"))
                return Error(tbDocId, "Por favor, Ingrese un Documento de Identidad. Ejemplo: 23345465 (para DNI) o 10243445653 (para RUC)");
            if (!Regex.IsMatch(tbNombre.Text, @"^[a-zA-Z., ]+$"))
                return Error(tbNombre, "Por favor, Ingrese un nombre valido. Ejemplo: Distribuciones Alpha S.A.C.");
            if (!Regex.IsMatch(tbDireccion.Text, @"^[0-9a-zA-Z., -]+$"))
                return Error(tbDireccion, "Por favor, Ingrese una direccion valida. Ejemplo: Av. Ejercito 5454, Santiago");
            if (dgvItems.RowCount == 0)
                return Error(dgvItems, "Por favor, Ingrese productos al comprobante. Presione Ctrl + B");
            dgvItems.ClearSelection();
            foreach (DataGridViewRow item in dgvItems.Rows)
            {
                if (!Regex.IsMatch(item.Cells["cantidad"].Value + "", @"^[0-9.]+$") && Convert.ToDecimal(item.Cells["cantidad"].Value) <= 0)
                {
                    item.Cells["cantidad"].Selected = true;
                    return Error(dgvItems, "Por favor, Ingrese una cantidad valida mayor a 0");
                }
                if (!Regex.IsMatch(item.Cells["vencimiento"].Value + "", @"^(|\d{2}/\d{2}/\d{4})+$"))
                {
                    item.Cells["vencimiento"].Selected = true;
                    return Error(dgvItems, "Por favor, Ingrese una fecha valida o dejelo en blanco");
                }
                if (!Regex.IsMatch(item.Cells["nroLote"].Value + "", @"^(\d*)+$"))
                {
                    item.Cells["nroLote"].Selected = true;
                    return Error(dgvItems, "Por favor, Ingrese un numero de lote valido o dejelo en blanco");
                }
            }
            if (cbTipo.SelectedValue + "" == "8")
            {
                if (!Regex.IsMatch(tbPartida.Text, @"^[0-9a-zA-Z., -]+$"))
                    return Error(tbPartida, "Por favor, Ingrese una direccion valida. Ejemplo: Av. Ejercito 5454, Santiago");
                if (!Regex.IsMatch(tbLlegada.Text, @"^[0-9a-zA-Z., -]+$"))
                    return Error(tbLlegada, "Por favor, Ingrese una direccion valida. Ejemplo: Av. Ejercito 5454, Santiago");
                if (!Regex.IsMatch(tbRucTransporte.Text, @"^([0-9]{11})$"))
                    return Error(tbRucTransporte, "Por favor, Ingrese un RUC. Ejemplo: 10243445653");
                if (!Regex.IsMatch(tbNombreTransporte.Text, @"^[a-zA-Z., ]+$"))
                    return Error(tbNombreTransporte, "Por favor, Ingrese una razon social valida. Ejemplo: E.T. Carga Alpha S.A.C.");
                if (!Regex.IsMatch(tbPlaca.Text, @"^([A-Za-z]{3}[0-9]{3}|[A-Za-z]{2}[0-9]{4})$"))
                    return Error(tbPlaca, "Por favor, Ingrese una placa valida. Ejemplo: UZ4354 o AIR435");
                if (!Regex.IsMatch(tbCertificadoInscripcion.Text, @"^[0-9- ]+$"))
                    return Error(tbCertificadoInscripcion, "Por favor, Ingrese Nro de Certificado de Inscripcion valido.");
                if (!Regex.IsMatch(tbLicenciaConducir.Text, @"^[0-9A-Za-z]+$"))
                    return Error(tbLicenciaConducir, "Por favor, Ingrese Nro de Licencia de Conducir valido.");
            }

            return true;
        }
        public override void OnSave(object id, Framework.Forms.ModoMantenimiento modo)
        {
            Element rpta = new Element();
            if (modo == ModoMantenimiento.Nuevo)
            {
                _("InsertarIngreso",
                        tbID, tbSerie, tbNumero, dtpFecha, cbTipo, cbMoneda, cbPago,
                        tbDocId, tbNombre, tbDireccion, new Element("idTipo", idTipoEntidad),
                        tbSubTotal, tbIGV, tbTotal, dgvItems,
                        dtpInicioTraslado, tbPartida, tbLlegada, cbMotivoTraslado,
                        tbComprobantePago, tbRucTransporte, tbNombreTransporte,
                        cbMarcaVehiculo, tbPlaca, tbCertificadoInscripcion, tbLicenciaConducir,
                        cbAfectaStock
                    ).Out(rpta);
            }
        }
        public override bool OnDelete(string id, DataGridViewCell cell)
        {
            Element rpta = new Element();
            _("AnularIngreso", tbID, cbAfectaStock, dgvItems)
                .Out(rpta);
            return true;
        }

        private void cbIncluyeIGV_SelectedIndexChanged(object sender, EventArgs e)
        {
            CalcularTotales(ItemsIncluyeIGV());
        }
        protected override bool ItemsIncluyeIGV()
        {
            return (cbIncluyeIGV.SelectedItem + "" == "SI");
        }
    }
}
